unit PagDuplicataRecRecordFr;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, DBCtrls, ActnList, Buttons, ComCtrls, ExtCtrls, EditBtn, DBGrids,
  MainRecordFr, types;

type

  { TPagDuplicataRecRecordFrame }

  TPagDuplicataRecRecordFrame = class(TMainRecordFrame)
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    ContaLookup: TDBLookupComboBox;
    GravarRenegAction: TAction;
    CancelarRenegAction: TAction;
    Label11: TLabel;
    ToolBar2: TToolBar;
    ToolButton21: TToolButton;
    ToolButton22: TToolButton;
    ToolButton23: TToolButton;
    ToolButton24: TToolButton;
    LocalizarBaixaAction: TAction;
    BtnDuplicata: TBitBtn;
    ComboPagamento: TDBLookupComboBox;
    DataPagamentoDBedit: TDBEdit;
    DataVencimentoDBEDit: TDBEdit;
    IDVendaEdit: TDBEdit;
    AcrescimoEdit: TEdit;
    IDVenda: TDBEdit;
    DBGroupBox1: TDBGroupBox;
    DescontoDBEDit: TDBEdit;
    diaVencimento: TDateEdit;
    GerarDuplicatasPrazo: TButton;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    IdDuplicataDBEdit: TDBEdit;
    IdFornecedorDBEdit: TDBEdit;
    IdClienteDBEdit: TDBEdit;
    JurosDBEdit: TDBEdit;
    Label1: TLabel;
    Label10: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    ToolButton13: TToolButton;
    ToolButton18: TToolButton;
    ToolButton19: TToolButton;
    ToolButton20: TToolButton;
    ToolButton9: TToolButton;
    ValorLabel: TLabel;
    Label15: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    NomePessoaDBEDit: TDBEdit;
    NomePessoaDBEDit1: TDBEdit;
    observacaoDBEdit: TDBMemo;
    Panel18: TPanel;
    Panel19: TPanel;
    RecordPageControl: TPageControl;
    Panel14: TPanel;
    Panel15: TPanel;
    PainelTotal: TPanel;
    Panel17: TPanel;
    ParcelaDBEdit: TDBEdit;
    RenegociarBaixaAction: TAction;
    CancelarBaixa: TAction;
    ReceberBaixa: TAction;
    SalvarBaixa: TAction;
    ExcluirBaixa: TAction;
    FecharBaixa: TAction;
    DuplicataActionList: TActionList;
    status: TDBRadioGroup;
    DuplicataTabSheet: TTabSheet;
    RenegociacaoTabSheet: TTabSheet;
    ToolBar1: TToolBar;
    ToolButton14: TToolButton;
    ToolButton15: TToolButton;
    ToolButton16: TToolButton;
    ToolButton17: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    TotalPagoDBedit: TDBText;
    Valor: TLabel;
    valor1: TDBText;
    procedure AcrescimoEditKeyPress(Sender: TObject; var Key: char);
    procedure BtnDuplicataClick(Sender: TObject);
    procedure CancelarBaixaExecute(Sender: TObject);
    procedure CancelarRenegActionExecute(Sender: TObject);
    procedure DescontoDBEDitKeyPress(Sender: TObject; var Key: char);
    procedure ExcluirBaixaExecute(Sender: TObject);
    procedure FecharBaixaExecute(Sender: TObject);
    procedure GerarDuplicatasPrazoClick(Sender: TObject);
    procedure GravarRenegActionExecute(Sender: TObject);
    procedure LocalizarBaixaActionExecute(Sender: TObject);
    procedure ReceberBaixaExecute(Sender: TObject);
    procedure JurosDBEditKeyPress(Sender: TObject; var Key: char);
    procedure ParcelaDBEditKeyPress(Sender: TObject; var Key: char);
    procedure RenegociarBaixaActionExecute(Sender: TObject);
    procedure SalvarBaixaExecute(Sender: TObject);
    procedure ControlaBotoes(); override;
    constructor Create(TheOwner: TComponent); override;

  private
    { private declarations }
  public
    { public declarations }
    Caixa: string;
  end;


implementation

uses Initializator, MainFr, DuplicataReceberDM, MainDM, MainFm;

procedure TPagDuplicataRecRecordFrame.BtnDuplicataClick(Sender: TObject);
begin
  TheControl.ShowSearchFrame(TMainFrame(DuplicataRecSearchFrame));
end;

procedure TPagDuplicataRecRecordFrame.AcrescimoEditKeyPress(Sender: TObject;
  var Key: char);
var
  Acrescimo: real;
begin
  //! Verificar se é 13 para outros SO
  if (key = #13) then begin
    Acrescimo := StrToFloatDef(AcrescimoEdit.Text, 0);
    ValorLabel.Caption := FloatToStr(StrToFloatDef(ValorLabel.Caption, 0) + Acrescimo);
  end;
end;

procedure TPagDuplicataRecRecordFrame.CancelarBaixaExecute(Sender: TObject);
begin
  DuplicataReceberData.DuplicataReceberZQuery.Cancel();
  DuplicataReceberData.DuplicataReceberZQuery.Connection.Rollback();
  ContaLookup.Enabled:=false;
  ControlaBotoes();
end;

procedure TPagDuplicataRecRecordFrame.CancelarRenegActionExecute(Sender: TObject);
begin
  DuplicataReceberData.DuplicataReceberZQuery.Connection.Rollback();
  RecordPageControl.ActivePage := DuplicataTabSheet;
  ControlaBotoes();
end;

procedure TPagDuplicataRecRecordFrame.DescontoDBEDitKeyPress(Sender: TObject;
  var Key: char);
var
  Desconto: real;
begin
  if (Key = #13) then begin
    Desconto := StrToFloatDef(DescontoDBEDit.Text, 0);
    TotalPagoDBedit.Caption := FloatToStr(StrToFloat(valor1.Caption) - Desconto);
  end;
end;

procedure TPagDuplicataRecRecordFrame.ExcluirBaixaExecute(Sender: TObject);
begin
  if (IdDuplicataDBEdit.Text <> '') and (ParcelaDBEdit.Text <> '') then begin
    DuplicataReceberData.CancelaDuplicata(StrToInt(IdDuplicataDBEdit.Text),
      StrToInt(ParcelaDBEdit.Text));
    ControlaBotoes();
  end;
end;


procedure TPagDuplicataRecRecordFrame.FecharBaixaExecute(Sender: TObject);
begin
  TheControl.BackFrame();
end;

procedure TPagDuplicataRecRecordFrame.GerarDuplicatasPrazoClick(Sender: TObject);
begin
  if (ComboPagamento.Text <> '') and (ValorLabel.Caption <> '0') and
    (IDVenda.Text <> '') then begin
    DuplicataReceberData.GeraDuplicataReceberRenegociacao(StrToInt(IDVenda.Text),
      StrToDate(diaVencimento.Text), StrToInt(IdClienteDbEdit.Text),
      ComboPagamento.KeyValue, StrToFloat(ValorLabel.Caption),
      StrToFloat(AcrescimoEdit.Text), Caixa);
  end;
end;

procedure TPagDuplicataRecRecordFrame.GravarRenegActionExecute(Sender: TObject);
begin
  DuplicataReceberData.DuplicataReceberZQuery.Connection.Commit();
  RecordPageControl.ActivePage := DuplicataTabSheet;
  ControlaBotoes();
end;

procedure TPagDuplicataRecRecordFrame.LocalizarBaixaActionExecute(Sender: TObject);
begin
  TheControl.ShowSearchFrame(TMainFrame(DuplicataRecSearchFrame));
end;

procedure TPagDuplicataRecRecordFrame.ReceberBaixaExecute(Sender: TObject);
begin
  Caixa := DuplicataReceberData.BuscaIDCaixa();
  if (IdDuplicataDBEdit.Text <> '') and (ParcelaDBEdit.Text <> '') then begin
    DuplicataReceberData.DuplicataReceberZQuery.Connection.StartTransaction();
    DuplicataReceberData.DuplicataReceberZQuery.Edit();
    DuplicataReceberData.DuplicataReceberZQuery.FieldByName('status').AsString := 'Q';
    DataPagamentoDBedit.Text := DuplicataReceberData.BuscaData();
    TotalPagoDBedit.Caption := valor1.Caption;
    ControlaBotoes();
    ContaLookup.Enabled:=true;
  end;
end;

procedure TPagDuplicataRecRecordFrame.JurosDBEditKeyPress(Sender: TObject;
  var Key: char);
var
  Acrescimo: real;
begin
  if key = #13 then begin
    Acrescimo := StrToFloatDef(JurosDBEdit.Text, 0);
    TotalPagoDBedit.Caption := FloatToStr(StrToFloat(valor1.Caption) + Acrescimo);
  end;
end;


procedure TPagDuplicataRecRecordFrame.ParcelaDBEditKeyPress(Sender: TObject;
  var Key: char);
var
  IdDuplicata, Parcela: integer;
  Encontrou: boolean;
begin
  //! Verificar se é 13 para outros SO
  if (key = #13) then begin
    IdDuplicata := StrToIntDef(IdDuplicataDBEdit.Text, 0);
    Parcela := StrToIntDef(ParcelaDBEdit.Text, 1);
    Encontrou := DuplicataReceberData.BuscaDuplicata(IdDuplicata, Parcela);
    if (Encontrou = False) then begin
      ShowMessage('Não existe a Duplicata');
      IdDuplicataDBEdit.SetFocus();
    end else begin
      DataPagamentoDBedit.Text := DuplicataReceberData.BuscaData();
    end;
  end;
end;


procedure TPagDuplicataRecRecordFrame.RenegociarBaixaActionExecute(Sender: TObject);
begin
  if (status.ItemIndex = 1) or (status.ItemIndex = 2) then begin
    ShowMessage('A duplicata esta Cancelada ou já foi Quitada!');
  end else begin
    DuplicataReceberData.DuplicataReceberZQuery.Edit();
    diaVencimento.Text := DuplicataReceberData.BuscaData();
    RenegociacaoTabSheet.Enabled := True;
    RecordPageControl.ActivePage := RenegociacaoTabSheet;
    ValorLabel.Caption := DuplicataReceberData.BuscaDuplicatasRenegociacao(IDVenda.Text);
    ControlaBotoes();
  end;
end;

procedure TPagDuplicataRecRecordFrame.SalvarBaixaExecute(Sender: TObject);
var
  Desconto, Acrescimo: real;
begin
  if (RecordPageControl.ActivePage = DuplicataTabSheet) then begin
    if ContaLookup.Text = '' then begin
      ShowMessage('Selecione uma conta!');
    end else begin
      if (ContaLookup.Text = 'CAIXA') and (Caixa = '') then begin
        if MessageDlg('Confirmação', 'Caixa não está Aberto! Deseja Abrir?',
          mtConfirmation, mbYesNo, 0) = mrYes then begin
          TheControl.ShowFrame(TMainFrame(CaixaInicioRecordFrame));
        end else begin
          ShowMessage('Escolha outra Conta!');
        end;
      end else begin
        Desconto := StrToFloatDef(DescontoDBEDit.Text, 0);
        Acrescimo := StrToFloatDef(JurosDBEdit.Text, 0);
        DuplicataReceberData.DuplicataReceberZQuery.FieldByName('valor_pago').AsFloat :=
          StrToFloatDef(TotalPagoDBedit.Caption,0);
        DuplicataReceberData.InsereBaixaConta(StrToFloatDef(TotalPagoDBedit.Caption,0),
          ContaLookup.KeyValue,
          IntToStr(MainForm.Usuario));
        DuplicataReceberData.DuplicataReceberZQuery.Post();
        DuplicataReceberData.DuplicataReceberZQuery.Connection.Commit();
        ContaLookup.Enabled:=false;
        DuplicataReceberData.Limpa();
        ControlaBotoes();
      end;
    end;
  end;
end;

procedure TPagDuplicataRecRecordFrame.ControlaBotoes();
var
  I: integer;
begin
  // Desabilita todas as ações
  for I := 0 to RecordActionList.ActionCount - 1 do begin
    TAction(RecordActionList.Actions[I]).Enabled := False;
  end;
  for I := 0 to DuplicataActionList.ActionCount - 1 do begin
    TAction(DuplicataActionList.Actions[I]).Enabled := False;
  end;
  RecordDBNavigator.Enabled := False;
  // Verifica se o frame possui módulo de dados
  if (DuplicataReceberData.DataSetState() = mdsDisable) then begin
    // Se não tiver desabilita todos os componentes
    for I := 0 to Self.ComponentCount - 1 do
      if Self.Components[I] is TControl then
        TControl(Self.Components[I]).Enabled := False;
  end else begin
    if RecordPageControl.ActivePage = DuplicataTabSheet then begin
      GravarRenegAction.Enabled := False;
      CancelarRenegAction.Enabled := False;
      // Verifica se o DataSet está em modo de edição e controla habilitação das ações
      if (DuplicataReceberData.DataSetState() in [mdsEditing, mdsInserting]) then begin
        SalvarBaixa.Enabled := True;
        CancelarBaixa.Enabled := True;
      end else begin
        LocalizarBaixaAction.Enabled := True;
        FecharBaixa.Enabled := True;
        if (DuplicataReceberData.DataSetState() = mdsCanEdit) then begin
          ReceberBaixa.Enabled := True;
          ExcluirBaixa.Enabled := True;
          RenegociarBaixaAction.Enabled := True;
        end;
      end;
    end else begin
      LocalizarBaixaAction.Enabled := True;
      FecharBaixa.Enabled := True;
      GravarRenegAction.Enabled := True;
      CancelarRenegAction.Enabled := True;
    end;
  end;
end;

constructor TPagDuplicataRecRecordFrame.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  RecordPageControl.ActivePage := DuplicataTabSheet;
end;

{ TPagDuplicataRecRecordFrame }


initialization
  {$I pagduplicatarecrecordfr.lrs}

end.
